package exp1.test3;

/**
 * Created by 春旺 on 2017/9/25.
 */
public class List<T> implements ListInterface<T> {
    public Object [] arry = new Object[100];

    /*
    声明一个整形数记录非空的元素
    用循环遍历数组不为空时size 加一
    为空继续循环
    */
    @Override
    public int getCurrentSize() {
        int size = 0;
        for (int i = 0; i < arry.length; i++){
            if (arry[i] != null){
                size = size + 1;
            }
        }
        return size;
    }
    /*
    遍历数组一发现有非空元素就就变为false 并结束循环
    */
    @Override
    public boolean isEmpty() {
        boolean b = true;
        for (int i = 0;i < arry.length;i++){
            if (arry[i] != null){
                b = false;
                break;
            }
        }

        return b;
    }
    /*
    遍历数组，在第一个非空的的数组元素并将其变成输入的元素
    */
    @Override
    public boolean add(T newEntry) {
        boolean b = false;
        for (int i = 0;i < arry.length;i++){
            if (arry[i] == null){
                arry[i] = (Object) newEntry;
                b = true;
                break;
            }
        }

        return b;
    }
    /*
    随意删除，所以将第一个非空的元素变成null
    */
    @Override
    public T remove() {
        T t = null;
        for (int i = 0;i < arry.length;i++){
            if (arry[i] != null){
                t = (T)arry[i];
                arry[i] = null;
                break;
            }
        }

        return t ;
    }
    /*
    先查找目标元素，未找到返回false。

    for循环遍历数组将所有的目标元素变成
    */
    @Override
    public boolean remove(T anEntry) {
        boolean b = false;
        for (int i =0; i < arry.length;i++){
            if (anEntry == arry[i]){
                arry [i] = null;
                b = true;
            }
        }
        return b;
    }
    /*
    删除所有的元素就将原先声明的数组清空
    */
    @Override
    public void clear() {
        for (int i = 0;i< 100;i++) {
            arry[i] = null;
        }
    }
    /*遍历数组将目标元素与数组中的元素一一比较
    如果相等就进行计数，返回计数后的总的值
    */
    @Override
    public int getFrequencyOf(T anEntry) {
        int number = 0;
        for (int i =0; i < arry.length;i++){
            if (anEntry == arry[i]){
                number ++;
            }


        }
        return number;
    }
    /* 遍历数组将目标元素与数组中的元素一一比较
    只要发现有数组中的元素与目标元素相等就退出循环*/
    @Override
    public boolean contains(T anEntry) {
        boolean b = false;
        for (int i =0; i < arry.length;i++){


            if (anEntry == arry[i]){
                arry [i] = null;
                b = true;
                break;
            }
        }
        return b;
    }

}
